<!doctype html>
<html>
<head>
<meta charset='UTF-8'><meta name='viewport' content='width=device-width initial-scale=1'>

<style type='text/css'>html {overflow-x: initial !important;}:root { --bg-color:#ffffff; --text-color:#333333; --select-text-bg-color:#B5D6FC; --select-text-font-color:auto; --monospace:"Lucida Console",Consolas,"Courier",monospace; --title-bar-height:20px; }
.mac-os-11 { --title-bar-height:28px; }
html { font-size: 14px; background-color: var(--bg-color); color: var(--text-color); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; }
body { margin: 0px; padding: 0px; height: auto; inset: 0px; font-size: 1rem; line-height: 1.42857; overflow-x: hidden; background: inherit; tab-size: 4; }
iframe { margin: auto; }
a.url { word-break: break-all; }
a:active, a:hover { outline: 0px; }
.in-text-selection, ::selection { text-shadow: none; background: var(--select-text-bg-color); color: var(--select-text-font-color); }
#write { margin: 0px auto; height: auto; width: inherit; word-break: normal; overflow-wrap: break-word; position: relative; white-space: normal; overflow-x: visible; padding-top: 36px; }
#write.first-line-indent p { text-indent: 2em; }
#write.first-line-indent li p, #write.first-line-indent p * { text-indent: 0px; }
#write.first-line-indent li { margin-left: 2em; }
.for-image #write { padding-left: 8px; padding-right: 8px; }
body.typora-export { padding-left: 30px; padding-right: 30px; }
.typora-export .footnote-line, .typora-export li, .typora-export p { white-space: pre-wrap; }
.typora-export .task-list-item input { pointer-events: none; }
@media screen and (max-width: 500px) {
  body.typora-export { padding-left: 0px; padding-right: 0px; }
  #write { padding-left: 20px; padding-right: 20px; }
  .CodeMirror-sizer { margin-left: 0px !important; }
  .CodeMirror-gutters { display: none !important; }
}
#write li > figure:last-child { margin-bottom: 0.5rem; }
#write ol, #write ul { position: relative; }
img { max-width: 100%; vertical-align: middle; image-orientation: from-image; }
button, input, select, textarea { color: inherit; font: inherit; }
input[type="checkbox"], input[type="radio"] { line-height: normal; padding: 0px; }
*, ::after, ::before { box-sizing: border-box; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p, #write pre { width: inherit; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p { position: relative; }
p { line-height: inherit; }
h1, h2, h3, h4, h5, h6 { break-after: avoid-page; break-inside: avoid; orphans: 4; }
p { orphans: 4; }
h1 { font-size: 2rem; }
h2 { font-size: 1.8rem; }
h3 { font-size: 1.6rem; }
h4 { font-size: 1.4rem; }
h5 { font-size: 1.2rem; }
h6 { font-size: 1rem; }
.md-math-block, .md-rawblock, h1, h2, h3, h4, h5, h6, p { margin-top: 1rem; margin-bottom: 1rem; }
.hidden { display: none; }
.md-blockmeta { color: rgb(204, 204, 204); font-weight: 700; font-style: italic; }
a { cursor: pointer; }
sup.md-footnote { padding: 2px 4px; background-color: rgba(238, 238, 238, 0.7); color: rgb(85, 85, 85); border-radius: 4px; cursor: pointer; }
sup.md-footnote a, sup.md-footnote a:hover { color: inherit; text-transform: inherit; text-decoration: inherit; }
#write input[type="checkbox"] { cursor: pointer; width: inherit; height: inherit; }
figure { overflow-x: auto; margin: 1.2em 0px; max-width: calc(100% + 16px); padding: 0px; }
figure > table { margin: 0px; }
tr { break-inside: avoid; break-after: auto; }
thead { display: table-header-group; }
table { border-collapse: collapse; border-spacing: 0px; width: 100%; overflow: auto; break-inside: auto; text-align: left; }
table.md-table td { min-width: 32px; }
.CodeMirror-gutters { border-right: 0px; background-color: inherit; }
.CodeMirror-linenumber { user-select: none; }
.CodeMirror { text-align: left; }
.CodeMirror-placeholder { opacity: 0.3; }
.CodeMirror pre { padding: 0px 4px; }
.CodeMirror-lines { padding: 0px; }
div.hr:focus { cursor: none; }
#write pre { white-space: pre-wrap; }
#write.fences-no-line-wrapping pre { white-space: pre; }
#write pre.ty-contain-cm { white-space: normal; }
.CodeMirror-gutters { margin-right: 4px; }
.md-fences { font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; overflow: visible; white-space: pre; background: inherit; position: relative !important; }
.md-fences-adv-panel { width: 100%; margin-top: 10px; text-align: center; padding-top: 0px; padding-bottom: 8px; overflow-x: auto; }
#write .md-fences.mock-cm { white-space: pre-wrap; }
.md-fences.md-fences-with-lineno { padding-left: 0px; }
#write.fences-no-line-wrapping .md-fences.mock-cm { white-space: pre; overflow-x: auto; }
.md-fences.mock-cm.md-fences-with-lineno { padding-left: 8px; }
.CodeMirror-line, twitterwidget { break-inside: avoid; }
.footnotes { opacity: 0.8; font-size: 0.9rem; margin-top: 1em; margin-bottom: 1em; }
.footnotes + .footnotes { margin-top: 0px; }
.md-reset { margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: top; background: 0px 0px; text-decoration: none; text-shadow: none; float: none; position: static; width: auto; height: auto; white-space: nowrap; cursor: inherit; -webkit-tap-highlight-color: transparent; line-height: normal; font-weight: 400; text-align: left; box-sizing: content-box; direction: ltr; }
li div { padding-top: 0px; }
blockquote { margin: 1rem 0px; }
li .mathjax-block, li p { margin: 0.5rem 0px; }
li blockquote { margin: 1rem 0px; }
li { margin: 0px; position: relative; }
blockquote > :last-child { margin-bottom: 0px; }
blockquote > :first-child, li > :first-child { margin-top: 0px; }
.footnotes-area { color: rgb(136, 136, 136); margin-top: 0.714rem; padding-bottom: 0.143rem; white-space: normal; }
#write .footnote-line { white-space: pre-wrap; }
@media print {
  body, html { border: 1px solid transparent; height: 99%; break-after: avoid; break-before: avoid; font-variant-ligatures: no-common-ligatures; }
  #write { margin-top: 0px; padding-top: 0px; border-color: transparent !important; }
  .typora-export * { -webkit-print-color-adjust: exact; }
  .typora-export #write { break-after: avoid; }
  .typora-export #write::after { height: 0px; }
  .is-mac table { break-inside: avoid; }
  .typora-export-show-outline .typora-export-sidebar { display: none; }
}
.footnote-line { margin-top: 0.714em; font-size: 0.7em; }
a img, img a { cursor: pointer; }
pre.md-meta-block { font-size: 0.8rem; min-height: 0.8rem; white-space: pre-wrap; background: rgb(204, 204, 204); display: block; overflow-x: hidden; }
p > .md-image:only-child:not(.md-img-error) img, p > img:only-child { display: block; margin: auto; }
#write.first-line-indent p > .md-image:only-child:not(.md-img-error) img { left: -2em; position: relative; }
p > .md-image:only-child { display: inline-block; width: 100%; }
#write .MathJax_Display { margin: 0.8em 0px 0px; }
.md-math-block { width: 100%; }
.md-math-block:not(:empty)::after { display: none; }
.MathJax_ref { fill: currentcolor; }
[contenteditable="true"]:active, [contenteditable="true"]:focus, [contenteditable="false"]:active, [contenteditable="false"]:focus { outline: 0px; box-shadow: none; }
.md-task-list-item { position: relative; list-style-type: none; }
.task-list-item.md-task-list-item { padding-left: 0px; }
.md-task-list-item > input { position: absolute; top: 0px; left: 0px; margin-left: -1.2em; margin-top: calc(1em - 10px); border: none; }
.math { font-size: 1rem; }
.md-toc { min-height: 3.58rem; position: relative; font-size: 0.9rem; border-radius: 10px; }
.md-toc-content { position: relative; margin-left: 0px; }
.md-toc-content::after, .md-toc::after { display: none; }
.md-toc-item { display: block; color: rgb(65, 131, 196); }
.md-toc-item a { text-decoration: none; }
.md-toc-inner:hover { text-decoration: underline; }
.md-toc-inner { display: inline-block; cursor: pointer; }
.md-toc-h1 .md-toc-inner { margin-left: 0px; font-weight: 700; }
.md-toc-h2 .md-toc-inner { margin-left: 2em; }
.md-toc-h3 .md-toc-inner { margin-left: 4em; }
.md-toc-h4 .md-toc-inner { margin-left: 6em; }
.md-toc-h5 .md-toc-inner { margin-left: 8em; }
.md-toc-h6 .md-toc-inner { margin-left: 10em; }
@media screen and (max-width: 48em) {
  .md-toc-h3 .md-toc-inner { margin-left: 3.5em; }
  .md-toc-h4 .md-toc-inner { margin-left: 5em; }
  .md-toc-h5 .md-toc-inner { margin-left: 6.5em; }
  .md-toc-h6 .md-toc-inner { margin-left: 8em; }
}
a.md-toc-inner { font-size: inherit; font-style: inherit; font-weight: inherit; line-height: inherit; }
.footnote-line a:not(.reversefootnote) { color: inherit; }
.md-attr { display: none; }
.md-fn-count::after { content: "."; }
code, pre, samp, tt { font-family: var(--monospace); }
kbd { margin: 0px 0.1em; padding: 0.1em 0.6em; font-size: 0.8em; color: rgb(36, 39, 41); background: rgb(255, 255, 255); border: 1px solid rgb(173, 179, 185); border-radius: 3px; box-shadow: rgba(12, 13, 14, 0.2) 0px 1px 0px, rgb(255, 255, 255) 0px 0px 0px 2px inset; white-space: nowrap; vertical-align: middle; }
.md-comment { color: rgb(162, 127, 3); opacity: 0.6; font-family: var(--monospace); }
code { text-align: left; vertical-align: initial; }
a.md-print-anchor { white-space: pre !important; border-width: initial !important; border-style: none !important; border-color: initial !important; display: inline-block !important; position: absolute !important; width: 1px !important; right: 0px !important; outline: 0px !important; background: 0px 0px !important; text-decoration: initial !important; text-shadow: initial !important; }
.os-windows.monocolor-emoji .md-emoji { font-family: "Segoe UI Symbol", sans-serif; }
.md-diagram-panel > svg { max-width: 100%; }
[lang="flow"] svg, [lang="mermaid"] svg { max-width: 100%; height: auto; }
[lang="mermaid"] .node text { font-size: 1rem; }
table tr th { border-bottom: 0px; }
video { max-width: 100%; display: block; margin: 0px auto; }
iframe { max-width: 100%; width: 100%; border: none; }
.highlight td, .highlight tr { border: 0px; }
mark { background: rgb(255, 255, 0); color: rgb(0, 0, 0); }
.md-html-inline .md-plain, .md-html-inline strong, mark .md-inline-math, mark strong { color: inherit; }
.md-expand mark .md-meta { opacity: 0.3 !important; }
mark .md-meta { color: rgb(0, 0, 0); }
@media print {
  .typora-export h1, .typora-export h2, .typora-export h3, .typora-export h4, .typora-export h5, .typora-export h6 { break-inside: avoid; }
}
.md-diagram-panel .messageText { stroke: none !important; }
.md-diagram-panel .start-state { fill: var(--node-fill); }
.md-diagram-panel .edgeLabel rect { opacity: 1 !important; }
.md-fences.md-fences-math { font-size: 1em; }
.md-fences-advanced:not(.md-focus) { padding: 0px; white-space: nowrap; border: 0px; }
.md-fences-advanced:not(.md-focus) { background: inherit; }
.typora-export-show-outline .typora-export-content { max-width: 1440px; margin: auto; display: flex; flex-direction: row; }
.typora-export-sidebar { width: 300px; font-size: 0.8rem; margin-top: 80px; margin-right: 18px; }
.typora-export-show-outline #write { --webkit-flex:2; flex: 2 1 0%; }
.typora-export-sidebar .outline-content { position: fixed; top: 0px; max-height: 100%; overflow: hidden auto; padding-bottom: 30px; padding-top: 60px; width: 300px; }
@media screen and (max-width: 1024px) {
  .typora-export-sidebar, .typora-export-sidebar .outline-content { width: 240px; }
}
@media screen and (max-width: 800px) {
  .typora-export-sidebar { display: none; }
}
.outline-content li, .outline-content ul { margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px; list-style: none; }
.outline-content ul { margin-top: 0px; margin-bottom: 0px; }
.outline-content strong { font-weight: 400; }
.outline-expander { width: 1rem; height: 1.42857rem; position: relative; display: table-cell; vertical-align: middle; cursor: pointer; padding-left: 4px; }
.outline-expander::before { content: ""; position: relative; font-family: Ionicons; display: inline-block; font-size: 8px; vertical-align: middle; }
.outline-item { padding-top: 3px; padding-bottom: 3px; cursor: pointer; }
.outline-expander:hover::before { content: ""; }
.outline-h1 > .outline-item { padding-left: 0px; }
.outline-h2 > .outline-item { padding-left: 1em; }
.outline-h3 > .outline-item { padding-left: 2em; }
.outline-h4 > .outline-item { padding-left: 3em; }
.outline-h5 > .outline-item { padding-left: 4em; }
.outline-h6 > .outline-item { padding-left: 5em; }
.outline-label { cursor: pointer; display: table-cell; vertical-align: middle; text-decoration: none; color: inherit; }
.outline-label:hover { text-decoration: underline; }
.outline-item:hover { border-color: rgb(245, 245, 245); background-color: var(--item-hover-bg-color); }
.outline-item:hover { margin-left: -28px; margin-right: -28px; border-left: 28px solid transparent; border-right: 28px solid transparent; }
.outline-item-single .outline-expander::before, .outline-item-single .outline-expander:hover::before { display: none; }
.outline-item-open > .outline-item > .outline-expander::before { content: ""; }
.outline-children { display: none; }
.info-panel-tab-wrapper { display: none; }
.outline-item-open > .outline-children { display: block; }
.typora-export .outline-item { padding-top: 1px; padding-bottom: 1px; }
.typora-export .outline-item:hover { margin-right: -8px; border-right: 8px solid transparent; }
.typora-export .outline-expander::before { content: "+"; font-family: inherit; top: -1px; }
.typora-export .outline-expander:hover::before, .typora-export .outline-item-open > .outline-item > .outline-expander::before { content: "−"; }
.typora-export-collapse-outline .outline-children { display: none; }
.typora-export-collapse-outline .outline-item-open > .outline-children, .typora-export-no-collapse-outline .outline-children { display: block; }
.typora-export-no-collapse-outline .outline-expander::before { content: "" !important; }
.typora-export-show-outline .outline-item-active > .outline-item .outline-label { font-weight: 700; }
.md-inline-math-container mjx-container { zoom: 0.95; }


.CodeMirror { height: auto; }
.CodeMirror.cm-s-inner { background: inherit; }
.CodeMirror-scroll { overflow: auto hidden; z-index: 3; }
.CodeMirror-gutter-filler, .CodeMirror-scrollbar-filler { background-color: rgb(255, 255, 255); }
.CodeMirror-gutters { border-right: 1px solid rgb(221, 221, 221); background: inherit; white-space: nowrap; }
.CodeMirror-linenumber { padding: 0px 3px 0px 5px; text-align: right; color: rgb(153, 153, 153); }
.cm-s-inner .cm-keyword { color: rgb(119, 0, 136); }
.cm-s-inner .cm-atom, .cm-s-inner.cm-atom { color: rgb(34, 17, 153); }
.cm-s-inner .cm-number { color: rgb(17, 102, 68); }
.cm-s-inner .cm-def { color: rgb(0, 0, 255); }
.cm-s-inner .cm-variable { color: rgb(0, 0, 0); }
.cm-s-inner .cm-variable-2 { color: rgb(0, 85, 170); }
.cm-s-inner .cm-variable-3 { color: rgb(0, 136, 85); }
.cm-s-inner .cm-string { color: rgb(170, 17, 17); }
.cm-s-inner .cm-property { color: rgb(0, 0, 0); }
.cm-s-inner .cm-operator { color: rgb(152, 26, 26); }
.cm-s-inner .cm-comment, .cm-s-inner.cm-comment { color: rgb(170, 85, 0); }
.cm-s-inner .cm-string-2 { color: rgb(255, 85, 0); }
.cm-s-inner .cm-meta { color: rgb(85, 85, 85); }
.cm-s-inner .cm-qualifier { color: rgb(85, 85, 85); }
.cm-s-inner .cm-builtin { color: rgb(51, 0, 170); }
.cm-s-inner .cm-bracket { color: rgb(153, 153, 119); }
.cm-s-inner .cm-tag { color: rgb(17, 119, 0); }
.cm-s-inner .cm-attribute { color: rgb(0, 0, 204); }
.cm-s-inner .cm-header, .cm-s-inner.cm-header { color: rgb(0, 0, 255); }
.cm-s-inner .cm-quote, .cm-s-inner.cm-quote { color: rgb(0, 153, 0); }
.cm-s-inner .cm-hr, .cm-s-inner.cm-hr { color: rgb(153, 153, 153); }
.cm-s-inner .cm-link, .cm-s-inner.cm-link { color: rgb(0, 0, 204); }
.cm-negative { color: rgb(221, 68, 68); }
.cm-positive { color: rgb(34, 153, 34); }
.cm-header, .cm-strong { font-weight: 700; }
.cm-del { text-decoration: line-through; }
.cm-em { font-style: italic; }
.cm-link { text-decoration: underline; }
.cm-error { color: red; }
.cm-invalidchar { color: red; }
.cm-constant { color: rgb(38, 139, 210); }
.cm-defined { color: rgb(181, 137, 0); }
div.CodeMirror span.CodeMirror-matchingbracket { color: rgb(0, 255, 0); }
div.CodeMirror span.CodeMirror-nonmatchingbracket { color: rgb(255, 34, 34); }
.cm-s-inner .CodeMirror-activeline-background { background: inherit; }
.CodeMirror { position: relative; overflow: hidden; }
.CodeMirror-scroll { height: 100%; outline: 0px; position: relative; box-sizing: content-box; background: inherit; }
.CodeMirror-sizer { position: relative; }
.CodeMirror-gutter-filler, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-vscrollbar { position: absolute; z-index: 6; display: none; outline: 0px; }
.CodeMirror-vscrollbar { right: 0px; top: 0px; overflow: hidden; }
.CodeMirror-hscrollbar { bottom: 0px; left: 0px; overflow: auto hidden; }
.CodeMirror-scrollbar-filler { right: 0px; bottom: 0px; }
.CodeMirror-gutter-filler { left: 0px; bottom: 0px; }
.CodeMirror-gutters { position: absolute; left: 0px; top: 0px; padding-bottom: 10px; z-index: 3; overflow-y: hidden; }
.CodeMirror-gutter { white-space: normal; height: 100%; box-sizing: content-box; padding-bottom: 30px; margin-bottom: -32px; display: inline-block; }
.CodeMirror-gutter-wrapper { position: absolute; z-index: 4; background: 0px 0px !important; border: none !important; }
.CodeMirror-gutter-background { position: absolute; top: 0px; bottom: 0px; z-index: 4; }
.CodeMirror-gutter-elt { position: absolute; cursor: default; z-index: 4; }
.CodeMirror-lines { cursor: text; }
.CodeMirror pre { border-radius: 0px; border-width: 0px; background: 0px 0px; font-family: inherit; font-size: inherit; margin: 0px; white-space: pre; overflow-wrap: normal; color: inherit; z-index: 2; position: relative; overflow: visible; }
.CodeMirror-wrap pre { overflow-wrap: break-word; white-space: pre-wrap; word-break: normal; }
.CodeMirror-code pre { border-right: 30px solid transparent; width: fit-content; }
.CodeMirror-wrap .CodeMirror-code pre { border-right: none; width: auto; }
.CodeMirror-linebackground { position: absolute; inset: 0px; z-index: 0; }
.CodeMirror-linewidget { position: relative; z-index: 2; overflow: auto; }
.CodeMirror-wrap .CodeMirror-scroll { overflow-x: hidden; }
.CodeMirror-measure { position: absolute; width: 100%; height: 0px; overflow: hidden; visibility: hidden; }
.CodeMirror-measure pre { position: static; }
.CodeMirror div.CodeMirror-cursor { position: absolute; visibility: hidden; border-right: none; width: 0px; }
.CodeMirror div.CodeMirror-cursor { visibility: hidden; }
.CodeMirror-focused div.CodeMirror-cursor { visibility: inherit; }
.cm-searching { background: rgba(255, 255, 0, 0.4); }
span.cm-underlined { text-decoration: underline; }
span.cm-strikethrough { text-decoration: line-through; }
.cm-tw-syntaxerror { color: rgb(255, 255, 255); background-color: rgb(153, 0, 0); }
.cm-tw-deleted { text-decoration: line-through; }
.cm-tw-header5 { font-weight: 700; }
.cm-tw-listitem:first-child { padding-left: 10px; }
.cm-tw-box { border-style: solid; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-color: inherit; border-top-width: 0px !important; }
.cm-tw-underline { text-decoration: underline; }
@media print {
  .CodeMirror div.CodeMirror-cursor { visibility: hidden; }
}


/* cyrillic-ext */
/* cyrillic */
/* greek-ext */
/* greek */
/* vietnamese */
/* latin-ext */
/* latin */
/* cyrillic-ext */
/* cyrillic */
/* greek-ext */
/* greek */
/* vietnamese */
/* latin-ext */
/* latin */
/* cyrillic-ext */
/* cyrillic */
/* greek-ext */
/* greek */
/* vietnamese */
/* latin-ext */
/* latin */
/* cyrillic-ext */
/* cyrillic */
/* greek-ext */
/* greek */
/* vietnamese */
/* latin-ext */
/* latin */
@font-face {
    font-family: 'Source Sans Pro';
    font-style: normal;
    font-weight: 600;
    src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url('file:///C://Users//v//AppData//Roaming//Typora/themes/vue/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}@import '';

:root {
    --side-bar-bg-color: #fff;
    --control-text-color: #777;
    --font-sans-serif: 'Ubuntu', 'Source Sans Pro', sans-serif !important;
    --font-monospace: 'Fira Code', 'Roboto Mono', monospace !important;
}

html {
    font-size: 16px;
}

body {
    font-family: var(--font-sans-serif);
    color: #34495e;
    -webkit-font-smoothing: antialiased;
    line-height: 1.6rem;
    letter-spacing: 0;
    margin: 0;
    overflow-x: hidden;
}

#write {
    max-width: 860px;
    margin: 0 auto;
    padding: 20px 30px 100px;
}

#write p {
    line-height: 1.6rem;
    word-spacing: .05rem;
}

#write ol li {
    padding-left: 0.5rem;
}

#write > ul:first-child,
#write > ol:first-child {
    margin-top: 30px;
}

body > *:first-child {
    margin-top: 0 !important;
}

body > *:last-child {
    margin-bottom: 0 !important;
}

a {
    color: #42b983;
    font-weight: 600;
    padding: 0 2px;
    text-decoration: none;
}

h1,
h2,
h3,
h4,
h5,
h6 {
    position: relative;
    margin-top: 1rem;
    margin-bottom: 1rem;
    font-weight: bold;
    line-height: 1.4;
    cursor: text;
}

h1:hover a.anchor,
h2:hover a.anchor,
h3:hover a.anchor,
h4:hover a.anchor,
h5:hover a.anchor,
h6:hover a.anchor {
    text-decoration: none;
}

h1 tt,
h1 code {
    font-size: inherit !important;
}

h2 tt,
h2 code {
    font-size: inherit !important;
}

h3 tt,
h3 code {
    font-size: inherit !important;
}

h4 tt,
h4 code {
    font-size: inherit !important;
}

h5 tt,
h5 code {
    font-size: inherit !important;
}

h6 tt,
h6 code {
    font-size: inherit !important;
}

h2 a,
h3 a {
    color: #34495e;
}

h1 {
    padding-bottom: .4rem;
    font-size: 2.2rem;
    line-height: 1.3;
}

h2 {
    font-size: 1.75rem;
    line-height: 1.225;
    margin: 35px 0 15px;
    padding-bottom: 0.5em;
    border-bottom: 1px solid #ddd;
}

h3 {
    font-size: 1.4rem;
    line-height: 1.43;
    margin: 20px 0 7px;
}

h4 {
    font-size: 1.2rem;
}

h5 {
    font-size: 1rem;
}

h6 {
    font-size: 1rem;
    color: #777;
}

p,
blockquote,
ul,
ol,
dl,
table {
    margin: 0.8em 0;
}

li > ol,
li > ul {
    margin: 0 0;
}

hr {
    height: 2px;
    padding: 0;
    margin: 16px 0;
    background-color: #e7e7e7;
    border: 0 none;
    overflow: hidden;
    box-sizing: content-box;
}

body > h2:first-child {
    margin-top: 0;
    padding-top: 0;
}

body > h1:first-child {
    margin-top: 0;
    padding-top: 0;
}

body > h1:first-child + h2 {
    margin-top: 0;
    padding-top: 0;
}

body > h3:first-child,
body > h4:first-child,
body > h5:first-child,
body > h6:first-child {
    margin-top: 0;
    padding-top: 0;
}

a:first-child h1,
a:first-child h2,
a:first-child h3,
a:first-child h4,
a:first-child h5,
a:first-child h6 {
    margin-top: 0;
    padding-top: 0;
}

h1 p,
h2 p,
h3 p,
h4 p,
h5 p,
h6 p {
    margin-top: 0;
}

li p.first {
    display: inline-block;
}

ul,
ol {
    padding-left: 30px;
}

ul:first-child,
ol:first-child {
    margin-top: 0;
}

ul:last-child,
ol:last-child {
    margin-bottom: 0;
}

blockquote {
    border-left: 4px solid #42b983;
    padding: 10px 15px;
    color: #777;
    background-color: rgba(66, 185, 131, .1);
}

table {
    padding: 0;
    word-break: initial;
}

table tr {
    border-top: 1px solid #dfe2e5;
    margin: 0;
    padding: 0;
}

table tr:nth-child(2n),
thead {
    background-color: #fafafa;
}

table tr th {
    font-weight: bold;
    border: 1px solid #dfe2e5;
    border-bottom: 0;
    text-align: left;
    margin: 0;
    padding: 6px 13px;
}

table tr td {
    border: 1px solid #dfe2e5;
    text-align: left;
    margin: 0;
    padding: 6px 13px;
}

table tr th:first-child,
table tr td:first-child {
    margin-top: 0;
}

table tr th:last-child,
table tr td:last-child {
    margin-bottom: 0;
}

#write strong {
    padding: 0 1px;
}

#write em {
    padding: 0 5px 0 2px;
}

#write table thead th {
    background-color: #f2f2f2;
}

#write .CodeMirror-gutters {
    border-right: none;
}

#write .md-fences {
    border: 1px solid #F4F4F4;
    -webkit-font-smoothing: initial;
    margin: 0.8rem 0 !important;
    padding: 0.3rem 0 !important;
    line-height: 1.43rem;
    background-color: #F8F8F8 !important;
    border-radius: 2px;
    font-family: var(--font-monospace);
    font-size: 0.85rem;
    word-wrap: normal;
}

#write .CodeMirror-wrap .CodeMirror-code pre {
    padding-left: 12px;
}

#write code, tt {
    padding: 2px 4px;
    border-radius: 2px;
    font-family: var(--font-monospace);
    font-size: 0.92rem;
    color: #e96900;
    background-color: #f8f8f8;
}

tt {
    margin: 0 2px;
}

#write .md-footnote {
    background-color: #f8f8f8;
    color: #e96900;
}

/* heighlight. */
#write mark {
    background-color: #EBFFEB;
    border-radius: 2px;
    padding: 2px 4px;
    margin: 0 2px;
    color: #222;
    font-weight: 500;
}

#write del {
    padding: 1px 2px;
}

.cm-s-inner .cm-link,
.cm-s-inner.cm-link {
    color: #22a2c9;
}

.cm-s-inner .cm-string {
    color: #22a2c9;
}

.md-task-list-item > input {
    margin-left: -1.3em;
}

@media print {
    html {
        font-size: 13px;
    }

    table,
    pre {
        page-break-inside: avoid;
    }

    pre {
        word-wrap: break-word;
    }
}

.md-fences {
    background-color: #f8f8f8;
}

.md-diagram-panel {
    position: static !important;
}

#write pre.md-meta-block {
    padding: 1rem;
    font-size: 85%;
    line-height: 1.45;
    background-color: #f7f7f7;
    border: 0;
    border-radius: 3px;
    color: #777777;
    margin-top: 0 !important;
}

.mathjax-block > .code-tooltip {
    bottom: .375rem;
}

#write > h3.md-focus:before {
    left: -1.5625rem;
    top: .375rem;
}

#write > h4.md-focus:before {
    left: -1.5625rem;
    top: .285714286rem;
}

#write > h5.md-focus:before {
    left: -1.5625rem;
    top: .285714286rem;
}

#write > h6.md-focus:before {
    left: -1.5625rem;
    top: .285714286rem;
}

.md-image > .md-meta {
    border-radius: 3px;
    font-family: var(--font-monospace);
    padding: 2px 0 0 4px;
    font-size: 0.9em;
    color: inherit;
}

.md-tag {
    color: inherit;
}

.md-toc {
    margin-top: 20px;
    padding-bottom: 20px;
}

.sidebar-tabs {
    border-bottom: none;
}

#typora-quick-open {
    border: 1px solid #ddd;
    background-color: #f8f8f8;
}

#typora-quick-open-item {
    background-color: #FAFAFA;
    border-color: #FEFEFE #e5e5e5 #e5e5e5 #eee;
    border-style: solid;
    border-width: 1px;
}

#md-notification:before {
    top: 10px;
}

/** focus mode */

.on-focus-mode blockquote {
    border-left-color: rgba(85, 85, 85, 0.12);
}

header,
.context-menu,
.megamenu-content,
footer {
    font-family: var(--font-sans-serif);
}

.file-node-content:hover .file-node-icon,
.file-node-content:hover .file-node-open-state {
    visibility: visible;
}

.mac-seamless-mode #typora-sidebar {
    background-color: var(--side-bar-bg-color);
}

.md-lang {
    color: #b4654d;
}

.html-for-mac .context-menu {
    --item-hover-bg-color: #E6F0FE;
}



</style><title>前端用户使用手册</title>
</head>
<body class='typora-export os-windows'><div class='typora-export-content'>
<div id='write'  class=''><h1 id='宿舍管理系统---前端用户使用手册'><span>宿舍管理系统 - 前端用户使用手册</span></h1><h2 id='📋-目录'><span>📋 目录</span></h2><ul><li><a href='#1-系统概述'><span>1. 系统概述</span></a></li><li><a href='#2-系统登录'><span>2. 系统登录</span></a></li><li><a href='#3-首页导航'><span>3. 首页导航</span></a></li><li><a href='#4-学生管理'><span>4. 学生管理</span></a></li><li><a href='#5-班级管理'><span>5. 班级管理</span></a></li><li><a href='#6-宿舍管理'><span>6. 宿舍管理</span></a></li><li><a href='#7-楼栋管理'><span>7. 楼栋管理</span></a></li><li><a href='#8-常见问题'><span>8. 常见问题</span></a></li></ul><hr /><h2 id='1-系统概述'><span>1. 系统概述</span></h2><h3 id='11-系统简介'><span>1.1 系统简介</span></h3><p><span>宿舍管理系统是一款面向学校宿舍管理人员的综合管理平台，提供学生信息管理、班级管理、宿舍分配、楼栋管理等核心功能。</span></p><h3 id='12-主要功能'><span>1.2 主要功能</span></h3><ul><li><span>✅ </span><strong><span>学生管理</span></strong><span>: 学生信息的增删改查、批量导入导出、自动分配宿舍</span></li><li><span>✅ </span><strong><span>班级管理</span></strong><span>: 班级信息维护、批量导入导出</span></li><li><span>✅ </span><strong><span>宿舍管理</span></strong><span>: 宿舍信息维护、床位管理、批量导入导出</span></li><li><span>✅ </span><strong><span>楼栋管理</span></strong><span>: 楼栋信息维护、统计分析、数据导出</span></li></ul><h3 id='13-技术特点'><span>1.3 技术特点</span></h3><ul><li><span>📱 </span><strong><span>响应式设计</span></strong><span>: 支持PC端、平板端访问</span></li><li><span>🎨 </span><strong><span>现代化界面</span></strong><span>: 基于Element Plus UI组件库</span></li><li><span>⚡ </span><strong><span>高效操作</span></strong><span>: 支持批量操作、Excel导入导出</span></li><li><span>🔐 </span><strong><span>安全可靠</span></strong><span>: JWT Token认证，数据加密传输</span></li></ul><h3 id='14-系统环境'><span>1.4 系统环境</span></h3><ul><li><strong><span>推荐浏览器</span></strong><span>: Chrome 90+、Edge 90+、Firefox 88+</span></li><li><strong><span>屏幕分辨率</span></strong><span>: 1366x768 及以上</span></li><li><strong><span>网络要求</span></strong><span>: 稳定的局域网或互联网连接</span></li></ul><hr /><h2 id='2-系统登录'><span>2. 系统登录</span></h2><h3 id='21-访问系统'><span>2.1 访问系统</span></h3><ol start='' ><li><span>打开浏览器，输入系统地址: </span><code>http://localhost:5173</code><span> (开发环境)</span></li><li><span>系统会自动跳转到登录页面</span></li></ol><h3 id='22-登录步骤'><span>2.2 登录步骤</span></h3><p><span>![登录页面示意]</span></p><p><strong><span>操作步骤</span></strong><span>:</span></p><ol start='' ><li><span>输入用户名</span></li><li><span>输入密码</span></li><li><span>点击「登录」按钮</span></li></ol><p><strong><span>默认账号</span></strong><span>:</span></p><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang=""><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.4375px; left: 12px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">用户名: admin</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">密码: 123456</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 46px;"></div><div class="CodeMirror-gutters" style="display: none; height: 46px;"></div></div></div></pre><h3 id='23-登录状态'><span>2.3 登录状态</span></h3><ul><li><span>✅ 登录成功后会自动跳转到首页</span></li><li><span>🔒 登录状态有效期为24小时</span></li><li><span>🚪 24小时后需要重新登录</span></li><li><span>💾 关闭浏览器不会退出登录（Token存储在本地）</span></li></ul><h3 id='24-退出登录'><span>2.4 退出登录</span></h3><p><span>点击右上角用户名 → 选择「退出登录」</span></p><hr /><h2 id='3-首页导航'><span>3. 首页导航</span></h2><h3 id='31-系统布局'><span>3.1 系统布局</span></h3><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang=""><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.4375px; left: 12px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">┌─────────────────────────────────────────┐</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│  Logo  宿舍管理系统 &nbsp; &nbsp;  用户名 ▼ 退出 &nbsp; │ ← 顶部导航栏</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">├──────┬──────────────────────────────────┤</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ &nbsp; &nbsp;  │ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ 侧边 │ &nbsp; &nbsp; &nbsp; &nbsp; 主内容区域 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ 菜单 │ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ &nbsp; &nbsp;  │ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">└──────┴──────────────────────────────────┘</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 183px;"></div><div class="CodeMirror-gutters" style="display: none; height: 183px;"></div></div></div></pre><h3 id='32-导航菜单'><span>3.2 导航菜单</span></h3><ul><li><p><span>🏠 </span><strong><span>首页</span></strong><span>: 系统概览和快捷入口</span></p></li><li><p><span>👨‍🎓 </span><strong><span>学生管理</span></strong><span> → 学生列表</span></p></li><li><p><span>📚 </span><strong><span>班级管理</span></strong><span> → 班级列表</span></p></li><li><p><span>🏢 </span><strong><span>宿舍管理</span></strong></p><ul><li><span>宿舍列表</span></li><li><span>楼栋管理</span></li></ul></li><li><p><span>ℹ️ </span><strong><span>关于系统</span></strong><span>: 系统信息</span></p></li></ul><h3 id='33-页面标题'><span>3.3 页面标题</span></h3><p><span>每个页面的浏览器标题会自动更新，格式为：</span><code>[功能名称] - 宿舍管理系统</code></p><hr /><h2 id='4-学生管理'><span>4. 学生管理</span></h2><h3 id='41-学生列表'><span>4.1 学生列表</span></h3><h4 id='411-功能概述'><span>4.1.1 功能概述</span></h4><p><span>学生列表是学生信息管理的核心页面，提供查询、添加、编辑、删除、批量操作、Excel导入导出、自动分配宿舍等功能。</span></p><h4 id='412-页面布局'><span>4.1.2 页面布局</span></h4><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang=""><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.4375px; left: 12px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">┌─────────────────────────────────────────────────────┐</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ 学生列表 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ [下载模板] [导入Excel] [导出数据] [批量删除(0)] [添加学生] │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">├─────────────────────────────────────────────────────┤</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ 学号[____] 姓名[____] 班级[▼____] 宿舍[____] &nbsp; &nbsp; &nbsp;  │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ [查询] [重置] [自动分配宿舍] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">├─────────────────────────────────────────────────────┤</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ □ 学号  姓名  性别  班级  楼栋  宿舍号  状态  操作 &nbsp;  │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ □ 2023001 张三 男 计科2023-1班 A栋 101 已入住 [编辑][删除] │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ □ 2023002 李四 女 计科2023-1班 A栋 201 已入住 [编辑][删除] │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">├─────────────────────────────────────────────────────┤</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  « 1 2 3 4 5 » &nbsp; &nbsp; &nbsp; &nbsp;  │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">└─────────────────────────────────────────────────────┘</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 297px;"></div><div class="CodeMirror-gutters" style="display: none; height: 297px;"></div></div></div></pre><hr /><h3 id='42-查询学生'><span>4.2 查询学生</span></h3><h4 id='421-搜索条件'><span>4.2.1 搜索条件</span></h4><figure><table><thead><tr><th><span>条件</span></th><th><span>类型</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>学号</span></td><td><span>输入框</span></td><td><span>支持模糊查询</span></td></tr><tr><td><span>姓名</span></td><td><span>输入框</span></td><td><span>支持模糊查询</span></td></tr><tr><td><span>班级</span></td><td><span>下拉选择</span></td><td><span>精确匹配</span></td></tr><tr><td><span>宿舍</span></td><td><span>输入框</span></td><td><span>支持模糊查询</span></td></tr></tbody></table></figure><h4 id='422-操作步骤'><span>4.2.2 操作步骤</span></h4><ol start='' ><li><span>输入搜索条件（可选一个或多个）</span></li><li><span>点击「查询」按钮</span></li><li><span>系统显示符合条件的学生列表</span></li><li><span>点击「重置」可清空搜索条件</span></li></ol><p><strong><span>小贴士</span></strong><span>:</span></p><ul><li><span>💡 不输入任何条件直接查询，会显示所有学生</span></li><li><span>💡 班级下拉框会自动加载系统中的所有班级</span></li><li><span>💡 支持组合查询，如同时按班级和性别筛选</span></li></ul><hr /><h3 id='43-添加学生'><span>4.3 添加学生</span></h3><h4 id='431-操作步骤'><span>4.3.1 操作步骤</span></h4><ol start='' ><li><span>点击右上角「添加学生」按钮</span></li><li><span>在弹出的对话框中填写学生信息</span></li><li><span>点击「确定」保存，或点击「取消」关闭</span></li></ol><h4 id='432-表单字段'><span>4.3.2 表单字段</span></h4><figure><table><thead><tr><th><span>字段</span></th><th><span>是否必填</span></th><th><span>验证规则</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>学号</span></td><td><span>✅ 必填</span></td><td><span>不能为空，系统内唯一</span></td><td><span>学生唯一标识</span></td></tr><tr><td><span>姓名</span></td><td><span>✅ 必填</span></td><td><span>不能为空</span></td><td><span>学生姓名</span></td></tr><tr><td><span>性别</span></td><td><span>✅ 必填</span></td><td><span>男/女</span></td><td><span>单选</span></td></tr><tr><td><span>班级</span></td><td><span>✅ 必填</span></td><td><span>下拉选择</span></td><td><span>从已有班级中选择</span></td></tr><tr><td><span>联系电话</span></td><td><span>✅ 必填</span></td><td><span>11位手机号</span></td><td><span>格式：1XXXXXXXXXX</span></td></tr><tr><td><span>楼栋</span></td><td><span>可选</span></td><td><span>-</span></td><td><span>可手动输入或从宿舍分配</span></td></tr><tr><td><span>宿舍号</span></td><td><span>可选</span></td><td><span>-</span></td><td><span>可手动输入或从宿舍分配</span></td></tr><tr><td><span>床位号</span></td><td><span>可选</span></td><td><span>-</span></td><td><span>床位编号</span></td></tr><tr><td><span>状态</span></td><td><span>可选</span></td><td><span>已入住/待入住</span></td><td><span>默认&quot;待入住&quot;</span></td></tr><tr><td><span>备注</span></td><td><span>可选</span></td><td><span>-</span></td><td><span>其他补充信息</span></td></tr></tbody></table></figure><h4 id='433-表单验证'><span>4.3.3 表单验证</span></h4><ul><li><span>❌ </span><strong><span>学号重复</span></strong><span>: &quot;该学号已存在，请更换学号&quot;</span></li><li><span>❌ </span><strong><span>手机号格式错误</span></strong><span>: &quot;手机号格式不正确&quot;</span></li><li><span>❌ </span><strong><span>必填项为空</span></strong><span>: &quot;XXX不能为空&quot;</span></li></ul><h4 id='434-成功提示'><span>4.3.4 成功提示</span></h4><p><span>✅ &quot;添加成功&quot; - 学生信息已保存，列表自动刷新</span></p><hr /><h3 id='44-编辑学生'><span>4.4 编辑学生</span></h3><h4 id='441-操作步骤'><span>4.4.1 操作步骤</span></h4><ol start='' ><li><span>在学生列表中找到要编辑的学生</span></li><li><span>点击操作列的「编辑」按钮</span></li><li><span>在弹出的对话框中修改信息</span></li><li><span>点击「确定」保存，或点击「取消」关闭</span></li></ol><h4 id='442-注意事项'><span>4.4.2 注意事项</span></h4><ul><li><span>💡 学号字段在编辑时不可修改（作为唯一标识）</span></li><li><span>💡 其他字段规则与添加学生相同</span></li><li><span>💡 修改后需要点击「确定」才会保存</span></li></ul><hr /><h3 id='45-删除学生'><span>4.5 删除学生</span></h3><h4 id='451-单个删除'><span>4.5.1 单个删除</span></h4><ol start='' ><li><span>在学生列表中找到要删除的学生</span></li><li><span>点击操作列的「删除」按钮</span></li><li><span>在确认对话框中点击「确定」</span></li><li><span>系统删除该学生并刷新列表</span></li></ol><h4 id='452-批量删除'><span>4.5.2 批量删除</span></h4><ol start='' ><li><span>勾选列表左侧的复选框，选择要删除的学生</span></li><li><span>右上角「批量删除」按钮会显示已选数量，如「批量删除 (5)」</span></li><li><span>点击「批量删除」按钮</span></li><li><span>在确认对话框中点击「确定」</span></li><li><span>系统批量删除学生并刷新列表</span></li></ol><h4 id='453-确认提示'><span>4.5.3 确认提示</span></h4><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang=""><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.4375px; left: 12px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">⚠️ 确认删除？</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">确定要删除选中的 5 名学生吗？此操作不可恢复。</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[取消] [确定]</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 69px;"></div><div class="CodeMirror-gutters" style="display: none; height: 69px;"></div></div></div></pre><h4 id='454-成功提示'><span>4.5.4 成功提示</span></h4><ul><li><span>✅ 单个删除: &quot;删除成功&quot;</span></li><li><span>✅ 批量删除: &quot;批量删除成功，共删除 5 条数据&quot;</span></li></ul><hr /><h3 id='46-excel-导入导出'><span>4.6 Excel 导入导出</span></h3><h4 id='461-下载导入模板'><span>4.6.1 下载导入模板</span></h4><ol start='' ><li><span>点击「下载模板」按钮</span></li><li><span>浏览器自动下载 </span><code>学生导入模板.xlsx</code></li><li><span>模板包含表头定义和一行示例数据</span></li></ol><p><strong><span>模板格式</span></strong><span>:</span></p><figure><table><thead><tr><th><span>学号</span></th><th><span>姓名</span></th><th><span>性别</span></th><th><span>年龄</span></th><th><span>班级</span></th><th><span>楼栋</span></th><th><span>宿舍号</span></th><th><span>联系电话</span></th><th><span>状态</span></th><th><span>备注</span></th></tr></thead><tbody><tr><td><span>2023001</span></td><td><span>张三</span></td><td><span>男</span></td><td><span>20</span></td><td><span>计科2023-1班</span></td><td><span>A栋</span></td><td><span>101</span></td><td><span>13800138001</span></td><td><span>已入住</span></td><td>&nbsp;</td></tr></tbody></table></figure><h4 id='462-导入excel'><span>4.6.2 导入Excel</span></h4><p><strong><span>操作步骤</span></strong><span>:</span></p><ol start='' ><li><span>点击「导入Excel」按钮</span></li><li><span>选择准备好的Excel文件（.xlsx 或 .xls）</span></li><li><span>系统自动上传并解析</span></li><li><span>显示上传进度条</span></li><li><span>导入成功后显示成功消息</span></li></ol><p><strong><span>导入规则</span></strong><span>:</span></p><ul><li><span>✅ 支持 </span><code>.xlsx</code><span> 和 </span><code>.xls</code><span> 格式</span></li><li><span>✅ 最大文件大小: 10MB</span></li><li><span>✅ 单次最多导入 1000 条数据</span></li><li><span>✅ 必填字段: 学号、姓名、性别、班级、联系电话</span></li><li><span>✅ 学号必须唯一，重复会导致导入失败</span></li></ul><p><strong><span>成功提示</span></strong><span>:</span></p><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang=""><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.4375px; left: 12px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">✅ 导入成功</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">导入成功，共导入 50 条数据</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 46px;"></div><div class="CodeMirror-gutters" style="display: none; height: 46px;"></div></div></div></pre><p><strong><span>错误提示</span></strong><span>:</span></p><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang=""><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.4375px; left: 12px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">❌ 导入失败</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">导入失败：第3行：学号不能为空</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 46px;"></div><div class="CodeMirror-gutters" style="display: none; height: 46px;"></div></div></div></pre><h4 id='463-导出数据'><span>4.6.3 导出数据</span></h4><ol start='' ><li><span>点击「导出数据」按钮</span></li><li><span>系统导出当前所有学生数据</span></li><li><span>浏览器自动下载 </span><code>学生列表_时间戳.xlsx</code></li></ol><p><strong><span>导出字段</span></strong><span>:</span></p><ul><li><span>学号、姓名、性别、年龄、班级、班主任、专业</span></li><li><span>楼栋、宿舍号、联系电话、状态、备注</span></li></ul><p><strong><span>注意事项</span></strong><span>:</span></p><ul><li><span>💡 导出的是全部数据，不受搜索条件限制</span></li><li><span>💡 导出文件可以作为备份使用</span></li><li><span>💡 导出的Excel可以直接修改后再导入</span></li></ul><hr /><h3 id='47-自动分配宿舍'><span>4.7 自动分配宿舍</span></h3><h4 id='471-功能说明'><span>4.7.1 功能说明</span></h4><p><span>自动分配宿舍功能可以智能地为未分配宿舍的学生批量分配宿舍，遵循以下规则：</span></p><p><strong><span>分配规则</span></strong><span>:</span></p><ol start='' ><li><span>✅ </span><strong><span>同班同性优先</span></strong><span>: 相同班级、相同性别的学生优先分配在同一宿舍</span></li><li><span>✅ </span><strong><span>混住限制</span></strong><span>: 同一宿舍混住的班级不超过3个</span></li><li><span>✅ </span><strong><span>只分配未分配学生</span></strong><span>: 已有宿舍的学生不会被重新分配</span></li><li><span>✅ </span><strong><span>尊重容纳人数</span></strong><span>: 根据宿舍的「容纳人数」字段计算可用床位</span></li></ol><h4 id='472-操作步骤'><span>4.7.2 操作步骤</span></h4><ol start='' ><li><span>点击搜索区域的「自动分配宿舍」按钮</span></li><li><span>系统开始自动分配（可能需要几秒钟）</span></li><li><span>弹出分配结果对话框</span></li></ol><h4 id='473-分配结果'><span>4.7.3 分配结果</span></h4><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang="" style="break-inside: unset;"><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.4375px; left: 12px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><span><span>​</span>x</span></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">✅ 分配完成</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="" cm-zwsp="">
</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">分配统计：</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">• 待分配学生总数: 120</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">• 成功分配: 115</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">• 未分配: 5 (宿舍不足)</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="" cm-zwsp="">
</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">分配详情：</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">📍 A栋-101</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; 学生: 张三、李四、王五、赵六</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; 班级: 计科2023-1班</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="" cm-zwsp="">
</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">📍 A栋-102</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; 学生: 钱七、孙八、周九</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; 班级: 计科2023-1班、计科2023-2班</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="" cm-zwsp="">
</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[关闭]</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 389px;"></div><div class="CodeMirror-gutters" style="display: none; height: 389px;"></div></div></div></pre><h4 id='474-注意事项'><span>4.7.4 注意事项</span></h4><ul><li><span>⚠️ 分配前请确保宿舍数据已正确录入</span></li><li><span>⚠️ 如有部分学生未分配，可能是宿舍床位不足</span></li><li><span>⚠️ 分配结果会立即生效，建议分配前备份数据</span></li><li><span>💡 可以手动调整分配结果</span></li></ul><hr /><h3 id='48-分页浏览'><span>4.8 分页浏览</span></h3><h4 id='481-分页控件'><span>4.8.1 分页控件</span></h4><p><span>位于列表底部，包含：</span></p><ul><li><span>总记录数显示: &quot;共 120 条&quot;</span></li><li><span>每页显示条数选择: 10 / 20 / 50 / 100</span></li><li><span>页码跳转: « 1 2 3 4 5 »</span></li><li><span>快速跳转: &quot;前往 [__] 页&quot;</span></li></ul><h4 id='482-操作说明'><span>4.8.2 操作说明</span></h4><ul><li><span>点击页码直接跳转到对应页</span></li><li><span>点击 « 跳转到上一页</span></li><li><span>点击 » 跳转到下一页</span></li><li><span>修改每页显示条数会自动刷新列表</span></li></ul><hr /><h2 id='5-班级管理'><span>5. 班级管理</span></h2><h3 id='51-班级列表'><span>5.1 班级列表</span></h3><h4 id='511-功能概述'><span>5.1.1 功能概述</span></h4><p><span>班级列表提供班级信息的全面管理，包括查询、添加、编辑、删除、批量操作、Excel导入导出。</span></p><h4 id='512-页面布局'><span>5.1.2 页面布局</span></h4><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang=""><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.4375px; left: 12px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">┌─────────────────────────────────────────────────────┐</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ 班级管理 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ [下载模板] [导入Excel] [导出数据] [批量删除(0)] [添加班级] │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">├─────────────────────────────────────────────────────┤</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ 班级名称[____] 专业[____] 状态[▼____] [查询] [重置]  │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">├─────────────────────────────────────────────────────┤</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ □ 班级名称  班主任  联系电话  专业  学生人数  状态  操作 │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ □ 计科2023-1班 张明 13800138001 计算机 45 正常 [编辑][删除] │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">├─────────────────────────────────────────────────────┤</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  « 1 2 3 4 5 » &nbsp; &nbsp; &nbsp; &nbsp;  │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">└─────────────────────────────────────────────────────┘</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 252px;"></div><div class="CodeMirror-gutters" style="display: none; height: 252px;"></div></div></div></pre><hr /><h3 id='52-添加班级'><span>5.2 添加班级</span></h3><h4 id='521-表单字段'><span>5.2.1 表单字段</span></h4><figure><table><thead><tr><th><span>字段</span></th><th><span>是否必填</span></th><th><span>验证规则</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>班级名称</span></td><td><span>✅ 必填</span></td><td><span>不能为空，唯一</span></td><td><span>如：计科2023-1班</span></td></tr><tr><td><span>班主任名称</span></td><td><span>✅ 必填</span></td><td><span>不能为空</span></td><td><span>班主任姓名</span></td></tr><tr><td><span>联系电话</span></td><td><span>✅ 必填</span></td><td><span>11位手机号</span></td><td><span>班主任电话</span></td></tr><tr><td><span>班级专业</span></td><td><span>可选</span></td><td><span>-</span></td><td><span>如：计算机科学与技术</span></td></tr><tr><td><span>学生人数</span></td><td><span>可选</span></td><td><span>0-100</span></td><td><span>默认为0</span></td></tr><tr><td><span>状态</span></td><td><span>可选</span></td><td><span>正常/停用</span></td><td><span>默认&quot;正常&quot;</span></td></tr><tr><td><span>备注</span></td><td><span>可选</span></td><td><span>-</span></td><td><span>补充信息</span></td></tr></tbody></table></figure><h4 id='522-操作步骤'><span>5.2.2 操作步骤</span></h4><ol start='' ><li><span>点击「添加班级」按钮</span></li><li><span>填写班级信息（必填项必须填写）</span></li><li><span>点击「确定」保存</span></li></ol><h4 id='523-验证规则'><span>5.2.3 验证规则</span></h4><ul><li><span>❌ </span><strong><span>班级名称重复</span></strong><span>: &quot;该班级名称已存在&quot;</span></li><li><span>❌ </span><strong><span>手机号格式错误</span></strong><span>: &quot;联系电话格式不正确&quot;</span></li><li><span>✅ </span><strong><span>添加成功</span></strong><span>: &quot;添加成功&quot;</span></li></ul><hr /><h3 id='53-编辑班级'><span>5.3 编辑班级</span></h3><h4 id='531-操作步骤'><span>5.3.1 操作步骤</span></h4><ol start='' ><li><span>点击操作列的「编辑」按钮</span></li><li><span>修改班级信息</span></li><li><span>点击「确定」保存</span></li></ol><h4 id='532-注意事项'><span>5.3.2 注意事项</span></h4><ul><li><span>💡 班级名称可以修改，但修改后不能与其他班级重复</span></li><li><span>💡 学生人数建议通过系统自动统计，手动修改可能不准确</span></li></ul><hr /><h3 id='54-删除班级'><span>5.4 删除班级</span></h3><h4 id='541-单个删除'><span>5.4.1 单个删除</span></h4><ol start='' ><li><span>点击操作列的「删除」按钮</span></li><li><span>确认删除操作</span></li><li><span>系统删除班级并刷新列表</span></li></ol><h4 id='542-批量删除'><span>5.4.2 批量删除</span></h4><ol start='' ><li><span>勾选要删除的班级</span></li><li><span>点击「批量删除」按钮</span></li><li><span>确认删除操作</span></li></ol><h4 id='543-确认提示'><span>5.4.3 确认提示</span></h4><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang=""><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.4375px; left: 12px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">⚠️ 确认删除？</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">确定要删除选中的 3 个班级吗？此操作不可恢复。</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">注意：删除班级不会删除该班级的学生。</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[取消] [确定]</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 92px;"></div><div class="CodeMirror-gutters" style="display: none; height: 92px;"></div></div></div></pre><hr /><h3 id='55-excel-导入导出'><span>5.5 Excel 导入导出</span></h3><h4 id='551-下载导入模板'><span>5.5.1 下载导入模板</span></h4><p><span>点击「下载模板」下载 </span><code>班级导入模板.xlsx</code></p><p><strong><span>模板格式</span></strong><span>:</span></p><figure><table><thead><tr><th><span>班级名称</span></th><th><span>班主任名称</span></th><th><span>联系电话</span></th><th><span>班级专业</span></th><th><span>学生人数</span></th><th><span>状态</span></th><th><span>备注</span></th></tr></thead><tbody><tr><td><span>计科2023-1班</span></td><td><span>张明</span></td><td><span>13800138001</span></td><td><span>计算机科学与技术</span></td><td><span>45</span></td><td><span>正常</span></td><td>&nbsp;</td></tr></tbody></table></figure><h4 id='552-导入规则'><span>5.5.2 导入规则</span></h4><ul><li><span>✅ 必填字段: 班级名称、班主任名称、联系电话</span></li><li><span>✅ 班级名称必须唯一</span></li><li><span>✅ 联系电话格式: 11位手机号</span></li><li><span>✅ 学生人数和状态为可选，有默认值</span></li></ul><h4 id='553-导入步骤'><span>5.5.3 导入步骤</span></h4><ol start='' ><li><span>点击「导入Excel」按钮</span></li><li><span>选择Excel文件</span></li><li><span>等待上传完成</span></li><li><span>查看导入结果</span></li></ol><h4 id='554-导出数据'><span>5.5.4 导出数据</span></h4><p><span>点击「导出数据」导出 </span><code>班级列表_时间戳.xlsx</code></p><p><strong><span>导出字段</span></strong><span>: 班级名称、班主任名称、联系电话、班级专业、学生人数、状态、备注</span></p><hr /><h3 id='56-查询班级'><span>5.6 查询班级</span></h3><h4 id='561-搜索条件'><span>5.6.1 搜索条件</span></h4><figure><table><thead><tr><th><span>条件</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>班级名称</span></td><td><span>支持模糊查询</span></td></tr><tr><td><span>专业</span></td><td><span>支持模糊查询</span></td></tr><tr><td><span>状态</span></td><td><span>正常/停用，精确匹配</span></td></tr></tbody></table></figure><h4 id='562-操作步骤'><span>5.6.2 操作步骤</span></h4><ol start='' ><li><span>输入搜索条件</span></li><li><span>点击「查询」按钮</span></li><li><span>系统显示符合条件的班级</span></li><li><span>点击「重置」清空条件</span></li></ol><hr /><h2 id='6-宿舍管理'><span>6. 宿舍管理</span></h2><h3 id='61-宿舍列表'><span>6.1 宿舍列表</span></h3><h4 id='611-功能概述'><span>6.1.1 功能概述</span></h4><p><span>宿舍列表提供宿舍信息管理，包括宿舍的新增、编辑、删除、批量操作、Excel导入导出，以及床位状态的实时查看。</span></p><h4 id='612-页面布局'><span>6.1.2 页面布局</span></h4><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang=""><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.4375px; left: 12px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">┌─────────────────────────────────────────────────────┐</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ 宿舍列表 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ [下载模板] [导入Excel] [导出数据] [批量删除(0)] [添加宿舍] │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">├─────────────────────────────────────────────────────┤</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ 楼栋[▼____] 宿舍号[____] 状态[▼____] [查询] [重置] &nbsp; │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">├─────────────────────────────────────────────────────┤</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ □ 楼栋 宿舍号 楼层 容纳人数 已入住 空余床位 状态 操作  │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ □ A栋 101 1 4 4 0 满员 [编辑][删除] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ □ A栋 102 1 4 3 1 可用 [编辑][删除] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">├─────────────────────────────────────────────────────┤</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  « 1 2 3 4 5 » &nbsp; &nbsp; &nbsp; &nbsp;  │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">└─────────────────────────────────────────────────────┘</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 275px;"></div><div class="CodeMirror-gutters" style="display: none; height: 275px;"></div></div></div></pre><hr /><h3 id='62-添加宿舍'><span>6.2 添加宿舍</span></h3><h4 id='621-表单字段'><span>6.2.1 表单字段</span></h4><figure><table><thead><tr><th><span>字段</span></th><th><span>是否必填</span></th><th><span>验证规则</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>楼栋</span></td><td><span>✅ 必填</span></td><td><span>不能为空</span></td><td><span>如：A栋、B栋</span></td></tr><tr><td><span>宿舍号</span></td><td><span>✅ 必填</span></td><td><span>不能为空</span></td><td><span>如：101、201</span></td></tr><tr><td><span>楼层</span></td><td><span>✅ 必填</span></td><td><span>1-20</span></td><td><span>整数</span></td></tr><tr><td><span>容纳人数</span></td><td><span>✅ 必填</span></td><td><span>1-8</span></td><td><span>该宿舍最多住几人</span></td></tr><tr><td><span>已入住人数</span></td><td><span>可选</span></td><td><span>0-容纳人数</span></td><td><span>默认为0</span></td></tr><tr><td><span>状态</span></td><td><span>可选</span></td><td><span>可用/满员/维修中</span></td><td><span>默认&quot;可用&quot;</span></td></tr><tr><td><span>备注</span></td><td><span>可选</span></td><td><span>-</span></td><td><span>补充信息</span></td></tr></tbody></table></figure><h4 id='622-唯一性约束'><span>6.2.2 唯一性约束</span></h4><p><span>同一楼栋、同一楼层、同一宿舍号的组合必须唯一。</span></p><p><strong><span>示例</span></strong><span>:</span></p><ul><li><span>✅ A栋-1层-101 可以添加</span></li><li><span>❌ A栋-1层-101 已存在，不能重复添加</span></li><li><span>✅ A栋-2层-101 可以添加（楼层不同）</span></li><li><span>✅ B栋-1层-101 可以添加（楼栋不同）</span></li></ul><h4 id='623-验证规则'><span>6.2.3 验证规则</span></h4><ul><li><span>❌ </span><strong><span>宿舍已存在</span></strong><span>: &quot;该宿舍已存在：A栋-1层-101&quot;</span></li><li><span>❌ </span><strong><span>已入住大于容纳人数</span></strong><span>: &quot;已入住人数不能大于容纳人数&quot;</span></li><li><span>✅ </span><strong><span>添加成功</span></strong><span>: &quot;添加成功&quot;</span></li></ul><hr /><h3 id='63-编辑宿舍'><span>6.3 编辑宿舍</span></h3><h4 id='631-操作步骤'><span>6.3.1 操作步骤</span></h4><ol start='' ><li><span>点击操作列的「编辑」按钮</span></li><li><span>修改宿舍信息</span></li><li><span>点击「确定」保存</span></li></ol><h4 id='632-注意事项'><span>6.3.2 注意事项</span></h4><ul><li><span>💡 修改楼栋、楼层、宿舍号时，仍需满足唯一性约束</span></li><li><span>💡 已入住人数不能超过容纳人数</span></li><li><span>💡 空余床位自动计算（容纳人数 - 已入住人数）</span></li></ul><hr /><h3 id='64-删除宿舍'><span>6.4 删除宿舍</span></h3><h4 id='641-单个删除'><span>6.4.1 单个删除</span></h4><ol start='' ><li><span>点击操作列的「删除」按钮</span></li><li><span>确认删除操作</span></li></ol><h4 id='642-批量删除'><span>6.4.2 批量删除</span></h4><ol start='' ><li><span>勾选要删除的宿舍</span></li><li><span>点击「批量删除」按钮</span></li><li><span>确认删除操作</span></li></ol><h4 id='643-确认提示'><span>6.4.3 确认提示</span></h4><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang=""><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.4375px; left: 12px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">⚠️ 确认删除？</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">确定要删除选中的 3 个宿舍吗？此操作不可恢复。</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">注意：删除宿舍前，请确保宿舍内没有学生。</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[取消] [确定]</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 92px;"></div><div class="CodeMirror-gutters" style="display: none; height: 92px;"></div></div></div></pre><hr /><h3 id='65-excel-导入导出'><span>6.5 Excel 导入导出</span></h3><h4 id='651-下载导入模板'><span>6.5.1 下载导入模板</span></h4><p><span>点击「下载模板」下载 </span><code>宿舍导入模板.xlsx</code></p><p><strong><span>模板格式</span></strong><span>:</span></p><figure><table><thead><tr><th><span>楼栋</span></th><th><span>宿舍号</span></th><th><span>楼层</span></th><th><span>容纳人数</span></th><th><span>已入住</span></th><th><span>状态</span></th><th><span>备注</span></th></tr></thead><tbody><tr><td><span>A栋</span></td><td><span>101</span></td><td><span>1</span></td><td><span>4</span></td><td><span>4</span></td><td><span>满员</span></td><td>&nbsp;</td></tr><tr><td><span>A栋</span></td><td><span>102</span></td><td><span>1</span></td><td><span>4</span></td><td><span>3</span></td><td><span>可用</span></td><td>&nbsp;</td></tr></tbody></table></figure><h4 id='652-导入规则'><span>6.5.2 导入规则</span></h4><ul><li><span>✅ 必填字段: 楼栋、宿舍号、楼层、容纳人数</span></li><li><span>✅ 楼栋+楼层+宿舍号组合必须唯一</span></li><li><span>✅ 已入住人数默认为0，可选填</span></li><li><span>✅ 状态默认为&quot;可用&quot;，可选填</span></li><li><span>✅ 容纳人数范围: 1-8</span></li><li><span>✅ 楼层范围: 1-20</span></li></ul><h4 id='653-导入示例'><span>6.5.3 导入示例</span></h4><p><strong><span>正确示例</span></strong><span>:</span></p><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang=""><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.4375px; left: 12px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">楼栋  宿舍号  楼层  容纳人数  已入住  状态 &nbsp;  备注</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">A栋 &nbsp; 101 &nbsp;  1 &nbsp; &nbsp; 4 &nbsp; &nbsp; &nbsp;  0 &nbsp; &nbsp;  可用</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">A栋 &nbsp; 102 &nbsp;  1 &nbsp; &nbsp; 4 &nbsp; &nbsp; &nbsp;  2 &nbsp; &nbsp;  可用</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">A栋 &nbsp; 201 &nbsp;  2 &nbsp; &nbsp; 4 &nbsp; &nbsp; &nbsp;  4 &nbsp; &nbsp;  满员</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">B栋 &nbsp; 101 &nbsp;  1 &nbsp; &nbsp; 6 &nbsp; &nbsp; &nbsp;  0 &nbsp; &nbsp;  可用 &nbsp;  大宿舍</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 114px;"></div><div class="CodeMirror-gutters" style="display: none; height: 114px;"></div></div></div></pre><p><strong><span>错误示例</span></strong><span>:</span></p><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang=""><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.4375px; left: 12px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">❌ 第3行：楼栋不能为空</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">❌ 第5行：宿舍已存在：A栋-1层-101</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">❌ 第7行：已入住人数不能大于容纳人数</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 69px;"></div><div class="CodeMirror-gutters" style="display: none; height: 69px;"></div></div></div></pre><h4 id='654-导出数据'><span>6.5.4 导出数据</span></h4><p><span>点击「导出数据」导出 </span><code>宿舍列表_时间戳.xlsx</code></p><p><strong><span>导出字段</span></strong><span>: 楼栋、宿舍号、楼层、容纳人数、已入住、空余床位、状态、备注</span></p><hr /><h3 id='66-查询宿舍'><span>6.6 查询宿舍</span></h3><h4 id='661-搜索条件'><span>6.6.1 搜索条件</span></h4><figure><table><thead><tr><th><span>条件</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>楼栋</span></td><td><span>下拉选择，精确匹配</span></td></tr><tr><td><span>宿舍号</span></td><td><span>输入框，模糊查询</span></td></tr><tr><td><span>状态</span></td><td><span>下拉选择，精确匹配</span></td></tr></tbody></table></figure><h4 id='662-操作步骤'><span>6.6.2 操作步骤</span></h4><ol start='' ><li><span>选择或输入搜索条件</span></li><li><span>点击「查询」按钮</span></li><li><span>系统显示符合条件的宿舍</span></li><li><span>点击「重置」清空条件</span></li></ol><hr /><h3 id='67-床位状态说明'><span>6.7 床位状态说明</span></h3><h4 id='671-状态类型'><span>6.7.1 状态类型</span></h4><figure><table><thead><tr><th><span>状态</span></th><th><span>说明</span></th><th><span>颜色标识</span></th></tr></thead><tbody><tr><td><span>可用</span></td><td><span>有空余床位</span></td><td><span>绿色</span></td></tr><tr><td><span>满员</span></td><td><span>已住满</span></td><td><span>红色</span></td></tr><tr><td><span>维修中</span></td><td><span>维护中不可用</span></td><td><span>灰色</span></td></tr><tr><td><span>待分配</span></td><td><span>待分配学生</span></td><td><span>橙色</span></td></tr></tbody></table></figure><h4 id='672-床位计算'><span>6.7.2 床位计算</span></h4><ul><li><strong><span>空余床位</span></strong><span> = 容纳人数 - 已入住人数</span></li><li><span>自动计算，实时更新</span></li><li><span>显示在列表中，一目了然</span></li></ul><hr /><h2 id='7-楼栋管理'><span>7. 楼栋管理</span></h2><h3 id='71-楼栋列表'><span>7.1 楼栋列表</span></h3><h4 id='711-功能概述'><span>7.1.1 功能概述</span></h4><p><span>楼栋管理提供楼栋信息的维护和统计分析，包括楼栋的增删改查、批量操作、数据导出、入住率统计。</span></p><h4 id='712-页面布局'><span>7.1.2 页面布局</span></h4><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang="" style="break-inside: unset;"><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.4375px; left: 12px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">┌─────────────────────────────────────────────────────┐</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ 楼栋管理 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ &nbsp; &nbsp; &nbsp; &nbsp;  [导出数据] [批量删除(0)] [添加楼栋] &nbsp; &nbsp; &nbsp; &nbsp;  │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">├─────────────────────────────────────────────────────┤</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ 楼栋名称[____] [查询] [重置] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">├─────────────────────────────────────────────────────┤</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ □ 楼栋名称 楼层数 宿舍总数 容纳人数 已入住 入住率 操作 │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ □ A栋 6 48 192 180 93.75% [编辑][删除] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ □ B栋 6 48 192 175 91.15% [编辑][删除] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">├─────────────────────────────────────────────────────┤</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ 统计信息：总楼栋数 4 | 总宿舍数 192 | 总容纳 768 | 已入住 720 | 平均入住率 93.75% │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">├─────────────────────────────────────────────────────┤</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">│ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  « 1 2 3 4 5 » &nbsp; &nbsp; &nbsp; &nbsp;  │</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">└─────────────────────────────────────────────────────┘</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 320px;"></div><div class="CodeMirror-gutters" style="display: none; height: 320px;"></div></div></div></pre><hr /><h3 id='72-添加楼栋'><span>7.2 添加楼栋</span></h3><h4 id='721-表单字段'><span>7.2.1 表单字段</span></h4><figure><table><thead><tr><th><span>字段</span></th><th><span>是否必填</span></th><th><span>验证规则</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>楼栋名称</span></td><td><span>✅ 必填</span></td><td><span>不能为空，唯一</span></td><td><span>如：A栋、B栋、学生公寓1号楼</span></td></tr><tr><td><span>楼层数</span></td><td><span>✅ 必填</span></td><td><span>1-50</span></td><td><span>该楼栋有几层</span></td></tr><tr><td><span>宿舍总数</span></td><td><span>✅ 必填</span></td><td><span>1-1000</span></td><td><span>该楼栋共有多少间宿舍</span></td></tr><tr><td><span>容纳人数</span></td><td><span>✅ 必填</span></td><td><span>1-10000</span></td><td><span>该楼栋总共能住多少人</span></td></tr><tr><td><span>已入住人数</span></td><td><span>✅ 必填</span></td><td><span>≥0</span></td><td><span>当前已入住人数</span></td></tr><tr><td><span>主题颜色</span></td><td><span>可选</span></td><td><span>十六进制颜色</span></td><td><span>如：#409EFF，用于统计图表</span></td></tr><tr><td><span>备注</span></td><td><span>可选</span></td><td><span>-</span></td><td><span>补充信息</span></td></tr></tbody></table></figure><h4 id='722-操作步骤'><span>7.2.2 操作步骤</span></h4><ol start='' ><li><span>点击「添加楼栋」按钮</span></li><li><span>填写楼栋信息</span></li><li><span>点击「确定」保存</span></li></ol><h4 id='723-验证规则'><span>7.2.3 验证规则</span></h4><ul><li><span>❌ </span><strong><span>楼栋名称重复</span></strong><span>: &quot;该楼栋名称已存在&quot;</span></li><li><span>❌ </span><strong><span>已入住大于容纳人数</span></strong><span>: &quot;已入住人数不能大于容纳人数&quot;</span></li><li><span>✅ </span><strong><span>添加成功</span></strong><span>: &quot;添加成功&quot;</span></li></ul><hr /><h3 id='73-编辑楼栋'><span>7.3 编辑楼栋</span></h3><h4 id='731-操作步骤'><span>7.3.1 操作步骤</span></h4><ol start='' ><li><span>点击操作列的「编辑」按钮</span></li><li><span>修改楼栋信息</span></li><li><span>点击「确定」保存</span></li></ol><h4 id='732-注意事项'><span>7.3.2 注意事项</span></h4><ul><li><span>💡 楼栋名称可以修改，但不能与其他楼栋重复</span></li><li><span>💡 容纳人数应该等于（宿舍总数 × 每间宿舍容纳人数）</span></li><li><span>💡 已入住人数建议通过系统自动统计</span></li></ul><hr /><h3 id='74-删除楼栋'><span>7.4 删除楼栋</span></h3><h4 id='741-单个删除'><span>7.4.1 单个删除</span></h4><ol start='' ><li><span>点击操作列的「删除」按钮</span></li><li><span>确认删除操作</span></li></ol><h4 id='742-批量删除'><span>7.4.2 批量删除</span></h4><ol start='' ><li><span>勾选要删除的楼栋</span></li><li><span>点击「批量删除」按钮</span></li><li><span>确认删除操作</span></li></ol><h4 id='743-确认提示'><span>7.4.3 确认提示</span></h4><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang=""><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.4375px; left: 12px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">⚠️ 确认删除？</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">确定要删除选中的 2 个楼栋吗？此操作不可恢复。</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">注意：删除楼栋前，请确保楼栋下的所有宿舍已清空。</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[取消] [确定]</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 92px;"></div><div class="CodeMirror-gutters" style="display: none; height: 92px;"></div></div></div></pre><hr /><h3 id='75-导出数据'><span>7.5 导出数据</span></h3><h4 id='751-操作步骤'><span>7.5.1 操作步骤</span></h4><p><span>点击「导出数据」导出 </span><code>楼栋列表_时间戳.xlsx</code></p><h4 id='752-导出字段'><span>7.5.2 导出字段</span></h4><p><span>楼栋名称、楼层数、宿舍总数、容纳人数、已入住、入住率(%)、主题颜色、备注</span></p><hr /><h3 id='76-统计信息'><span>7.6 统计信息</span></h3><h4 id='761-统计指标'><span>7.6.1 统计指标</span></h4><p><span>列表底部会实时显示以下统计信息：</span></p><ul><li><strong><span>总楼栋数</span></strong><span>: 系统中的楼栋总数</span></li><li><strong><span>总宿舍数</span></strong><span>: 所有楼栋的宿舍总和</span></li><li><strong><span>总容纳人数</span></strong><span>: 所有楼栋的容纳人数总和</span></li><li><strong><span>已入住人数</span></strong><span>: 所有楼栋的已入住人数总和</span></li><li><strong><span>平均入住率</span></strong><span>: 已入住 / 总容纳 × 100%</span></li></ul><h4 id='762-入住率计算'><span>7.6.2 入住率计算</span></h4><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang=""><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.4375px; left: 12px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">入住率 = (已入住人数 / 容纳人数) × 100%</span></pre></div></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 23px;"></div><div class="CodeMirror-gutters" style="display: none; height: 23px;"></div></div></div></pre><h4 id='763-颜色标识'><span>7.6.3 颜色标识</span></h4><ul><li><span>🟢 入住率 ≥ 90%: 绿色（高入住率）</span></li><li><span>🟡 入住率 60%-90%: 黄色（中等）</span></li><li><span>🔴 入住率 &lt; 60%: 红色（低入住率）</span></li></ul><hr /><h3 id='77-查询楼栋'><span>7.7 查询楼栋</span></h3><h4 id='771-搜索条件'><span>7.7.1 搜索条件</span></h4><figure><table><thead><tr><th><span>条件</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>楼栋名称</span></td><td><span>支持模糊查询</span></td></tr></tbody></table></figure><h4 id='772-操作步骤'><span>7.7.2 操作步骤</span></h4><ol start='' ><li><span>输入楼栋名称</span></li><li><span>点击「查询」按钮</span></li><li><span>系统显示符合条件的楼栋</span></li><li><span>点击「重置」清空条件</span></li></ol><hr /><h2 id='8-常见问题'><span>8. 常见问题</span></h2><h3 id='81-登录相关'><span>8.1 登录相关</span></h3><p><strong><span>Q1: 忘记密码怎么办？</span></strong><span></span><br/><span>A: 请联系系统管理员重置密码。</span></p><p><strong><span>Q2: 登录后24小时会自动退出吗？</span></strong><span></span><br/><span>A: Token有效期为24小时，过期后需要重新登录。</span></p><p><strong><span>Q3: 关闭浏览器后需要重新登录吗？</span></strong><span></span><br/><span>A: 不需要。Token存储在本地存储中，关闭浏览器后再打开，如果Token未过期，仍然保持登录状态。</span></p><hr /><h3 id='82-数据导入'><span>8.2 数据导入</span></h3><p><strong><span>Q1: 导入Excel时提示&quot;第3行：学号不能为空&quot;？</span></strong><span></span><br/><span>A: 说明Excel第3行的学号字段为空，请检查并填写后重新导入。</span></p><p><strong><span>Q2: 导入失败后，已经导入的数据会保留吗？</span></strong><span></span><br/><span>A: 不会。导入采用事务机制，如果有任何一行数据验证失败，整个导入操作会回滚，不会部分保存。</span></p><p><strong><span>Q3: Excel模板可以修改列的顺序吗？</span></strong><span></span><br/><span>A: 不建议修改。系统按列名解析数据，如果修改了列名或顺序，可能导致导入失败。</span></p><p><strong><span>Q4: 可以导入多少条数据？</span></strong><span></span><br/><span>A: 单次最多导入1000条数据，超过会提示错误。建议分批导入。</span></p><p><strong><span>Q5: 导入时出现乱码怎么办？</span></strong><span></span><br/><span>A: 确保Excel文件编码为UTF-8，或使用系统提供的模板文件。</span></p><hr /><h3 id='83-宿舍分配'><span>8.3 宿舍分配</span></h3><p><strong><span>Q1: 自动分配宿舍时，有些学生没有分配成功？</span></strong><span></span><br/><span>A: 可能原因：</span></p><ul><li><span>宿舍床位不足</span></li><li><span>没有对应性别的宿舍</span></li><li><span>宿舍状态为&quot;维修中&quot;或&quot;停用&quot;</span></li></ul><p><strong><span>Q2: 自动分配的结果不满意，可以重新分配吗？</span></strong><span></span><br/><span>A: 可以。但重新分配会覆盖之前的分配结果。建议先手动调整个别学生，而不是全部重新分配。</span></p><p><strong><span>Q3: 分配宿舍时会考虑学生的意愿吗？</span></strong><span></span><br/><span>A: 当前版本的自动分配不考虑学生意愿，仅按班级和性别分配。可以通过手动编辑学生信息调整宿舍。</span></p><hr /><h3 id='84-数据操作'><span>8.4 数据操作</span></h3><p><strong><span>Q1: 删除班级后，该班级的学生会被删除吗？</span></strong><span></span><br/><span>A: 不会。删除班级不会删除学生，学生的班级字段仍保留原班级名称。</span></p><p><strong><span>Q2: 删除楼栋后，该楼栋的宿舍会被删除吗？</span></strong><span></span><br/><span>A: 不会。删除楼栋不会删除宿舍，但建议先删除或转移宿舍数据后再删除楼栋。</span></p><p><strong><span>Q3: 批量删除可以撤销吗？</span></strong><span></span><br/><span>A: 不可以。删除操作不可恢复，请谨慎操作。建议删除前先导出数据备份。</span></p><p><strong><span>Q4: 如何恢复误删的数据？</span></strong><span></span><br/><span>A: 如果有数据备份（Excel导出），可以通过导入功能恢复。没有备份则无法恢复。</span></p><hr /><h3 id='85-性能相关'><span>8.5 性能相关</span></h3><p><strong><span>Q1: 查询速度很慢怎么办？</span></strong><span></span><br/><span>A: 可能原因：</span></p><ul><li><span>数据量过大（建议使用搜索条件缩小范围）</span></li><li><span>网络连接不稳定</span></li><li><span>服务器负载过高</span></li></ul><p><strong><span>Q2: 导出数据时浏览器卡顿？</span></strong><span></span><br/><span>A: 导出大量数据时可能需要几秒钟，请耐心等待，不要重复点击。</span></p><hr /><h3 id='86-浏览器兼容性'><span>8.6 浏览器兼容性</span></h3><p><strong><span>Q1: 推荐使用什么浏览器？</span></strong><span></span><br/><span>A: 推荐使用以下现代浏览器：</span></p><ul><li><span>✅ Google Chrome 90+</span></li><li><span>✅ Microsoft Edge 90+</span></li><li><span>✅ Firefox 88+</span></li><li><span>❌ 不支持 IE 11 及以下</span></li></ul><p><strong><span>Q2: 浏览器显示不正常怎么办？</span></strong><span></span><br/><span>A: 尝试以下方法：</span></p><ul><li><span>清除浏览器缓存</span></li><li><span>更新浏览器到最新版本</span></li><li><span>切换到推荐的浏览器</span></li></ul><hr /><h3 id='87-数据验证'><span>8.7 数据验证</span></h3><p><strong><span>Q1: 为什么学号不能重复？</span></strong><span></span><br/><span>A: 学号是学生的唯一标识，系统用于区分不同学生，必须唯一。</span></p><p><strong><span>Q2: 手机号格式有什么要求？</span></strong><span></span><br/><span>A: 必须是11位数字，以1开头，如：13800138000。</span></p><p><strong><span>Q3: 班级名称可以包含特殊字符吗？</span></strong><span></span><br/><span>A: 可以包含中文、英文、数字、短横线、空格等常见字符。</span></p><hr /><h3 id='88-其他问题'><span>8.8 其他问题</span></h3><p><strong><span>Q1: 系统支持移动端访问吗？</span></strong><span></span><br/><span>A: 系统采用响应式设计，支持平板访问，但手机端显示效果可能不佳，建议使用PC或平板。</span></p><p><strong><span>Q2: 数据会自动备份吗？</span></strong><span></span><br/><span>A: 系统不提供自动备份功能，建议定期使用&quot;导出数据&quot;功能手动备份。</span></p><p><strong><span>Q3: 可以同时登录多个账号吗？</span></strong><span></span><br/><span>A: 可以，但需要使用不同的浏览器或无痕模式。同一浏览器只能保持一个账号登录。</span></p><p><strong><span>Q4: 如何联系技术支持？</span></strong><span></span><br/><span>A: 请联系系统管理员或开发团队。</span></p><hr /><h2 id='9-操作技巧'><span>9. 操作技巧</span></h2><h3 id='91-快捷操作'><span>9.1 快捷操作</span></h3><ul><li><span>🔍 </span><strong><span>快速搜索</span></strong><span>: 使用 Enter 键提交搜索表单</span></li><li><span>📑 </span><strong><span>分页跳转</span></strong><span>: 直接输入页码按 Enter 快速跳转</span></li><li><span>⌨️ </span><strong><span>表单提交</span></strong><span>: 弹窗表单中按 Enter 键等同于点击「确定」</span></li><li><span>🖱️ </span><strong><span>多选操作</span></strong><span>: 按住 Shift 键可连续选择多行</span></li></ul><h3 id='92-数据管理建议'><span>9.2 数据管理建议</span></h3><ol start='' ><li><strong><span>定期备份</span></strong><span>: 每周至少导出一次所有数据作为备份</span></li><li><strong><span>数据清理</span></strong><span>: 定期清理无效或重复数据</span></li><li><strong><span>批量操作</span></strong><span>: 使用Excel导入可以快速批量添加数据</span></li><li><strong><span>权限管理</span></strong><span>: 不同操作员使用不同账号，便于追踪操作记录</span></li></ol><h3 id='93-最佳实践'><span>9.3 最佳实践</span></h3><ol start='' ><li><strong><span>先录入基础数据</span></strong><span>: 楼栋 → 宿舍 → 班级 → 学生</span></li><li><strong><span>使用模板</span></strong><span>: 导入数据前先下载模板，按模板格式填写</span></li><li><strong><span>小批量测试</span></strong><span>: 首次导入时先测试少量数据，确认无误后再大批量导入</span></li><li><strong><span>及时保存</span></strong><span>: 编辑数据后务必点击「确定」保存</span></li></ol><hr /><h2 id='10-系统更新'><span>10. 系统更新</span></h2><h3 id='101-版本信息'><span>10.1 版本信息</span></h3><ul><li><strong><span>当前版本</span></strong><span>: v1.0</span></li><li><strong><span>发布日期</span></strong><span>: 2025-10-18</span></li></ul><h3 id='102-主要功能'><span>10.2 主要功能</span></h3><ul><li><span>✅ 学生信息管理</span></li><li><span>✅ 班级信息管理</span></li><li><span>✅ 宿舍信息管理</span></li><li><span>✅ 楼栋信息管理</span></li><li><span>✅ Excel 批量导入导出</span></li><li><span>✅ 智能宿舍分配</span></li><li><span>✅ 批量删除操作</span></li><li><span>✅ 数据统计分析</span></li></ul><hr /><h2 id='📞-联系我们'><span>📞 联系我们</span></h2><p><span>如有任何问题或建议，请联系：</span></p><p><strong><span>技术支持</span></strong><span>: 宿舍管理系统开发团队</span><br/><strong><span>文档版本</span></strong><span>: v1.0</span><br/><strong><span>最后更新</span></strong><span>: 2025-10-18</span></p><hr /><p><strong><span>感谢使用宿舍管理系统！</span></strong></p><p>&nbsp;</p></div></div>
</body>
</html>